package gretha.GUI;

import gretha.donnees.Cohorte;
import gretha.donnees.Massif;
import gretha.donnees.TypeBois;
import gretha.utils.ConnecteurBDD;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.JFrame;
/**
 * 
 * La classe FenetrePrincipale contient les différentes 
 * parties graphiques du logiciel. C'est la fenetre visible.
 *
 */
public class FenetrePrincipale extends JFrame{

	private static final long serialVersionUID = 8735828663622946890L;

	private HautDePage hautDePage;

	private PartieGauche partieGauche;

	private PartieCentrale partieCentrale;

	private PartieDroite partieDroite;

	private PiedDePage piedDePage;

	private ArrayList<Cohorte> cohortes;

	private ArrayList<Massif> massifs;
	
	private ArrayList<TypeBois> typesDeBois;
	
	public FenetrePrincipale() {
		

		//Affichage des fenetres "windows" (plus joli)
		/*try {
		        UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
		      } catch (Exception e) {
		        e.printStackTrace();
		      }*/
		//Titre de la fenetre (au-dessus)
		this.setTitle("Projet Forestier - module 1");
		//taille
		this.setSize(600, 200);
		//taille minimum
		this.setMinimumSize(new Dimension(600,200));
		//layout
		BorderLayout layout = new BorderLayout();
		this.setLayout(layout);
		//redimensionnable ou non
		this.setResizable(true);
		//Ferme le programme quand on clique sur la croix
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//au centre de l'écran
		this.setLocationRelativeTo(null);
		//Ajout d'un menu
		this.setJMenuBar(new Menu(this));

		//Ajout des différentes parties selon leur position
		hautDePage = new HautDePage();
		this.add(hautDePage, BorderLayout.NORTH);

		partieGauche = new PartieGauche();
		this.add(partieGauche,BorderLayout.WEST);

		partieDroite = new PartieDroite();
		this.add(partieDroite,BorderLayout.EAST);

		piedDePage = new PiedDePage();
		this.add(piedDePage,BorderLayout.SOUTH);

		//Initialisation de la liste des cohortes
		cohortes = new ArrayList<Cohorte>();
		
		//Initialisation de la liste des massifs
		massifs = new ArrayList<Massif>();
		
		//Initialisation de la liste des types de bois
		typesDeBois = new ArrayList<TypeBois>();

		//Si on n'indique rien, la partie est ajoutée au centre dans l'espace disponible
		partieCentrale = new PartieCentrale(this);
		this.add(partieCentrale);

		//Affichage de la fenetre
		this.setVisible(true);   

	}


	public void changerLaTaille(int longueur, int hauteur)
	{
		setSize(longueur, hauteur);
		setLocationRelativeTo(null);
	}

	public void recupererCohortes()
	{
		if(!cohortes.isEmpty())
			cohortes.clear();

		try {
			ResultSet rs = ConnecteurBDD.executeQuery("SELECT * from cohortes");
			while(rs.next())
			{
				if((rs.getInt(1) > 0))
				{	
					Cohorte temp = new Cohorte();
					temp.setNom(rs.getString(2));
					cohortes.add(temp);
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public void recupererMassifs()
	{
		if(!massifs.isEmpty())
			massifs.clear();

		try {
			ResultSet rs = ConnecteurBDD.executeQuery("SELECT * from massifs");
			while(rs.next())
			{
				if((rs.getInt(1) > 0))
				{	
					Massif temp = new Massif();
					temp.setNom(rs.getString(2));
					massifs.add(temp);
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public void recupererTypeDeBois()
	{
		if(!typesDeBois.isEmpty())
			typesDeBois.clear();
		
		try {
			ResultSet rs = ConnecteurBDD.executeQuery("SELECT * from typebois");
			while(rs.next())
			{
				if((rs.getInt(1) > 0))
				{	
					TypeBois temp = new TypeBois();
					temp.setNom(rs.getString(2));
					typesDeBois.add(temp);
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}


	public ArrayList<Massif> getMassifs() {
		recupererMassifs();
		return massifs;
	}


	public void setMassifs(ArrayList<Massif> massifs) {
		this.massifs = massifs;
	}


	public HautDePage getHautDePage() {
		return hautDePage;
	}

	public void setHautDePage(HautDePage hautDePage) {
		this.hautDePage = hautDePage;
	}

	public PartieGauche getPartieGauche() {
		return partieGauche;
	}

	public void setPartieGauche(PartieGauche partieGauche) {
		this.partieGauche = partieGauche;
	}

	public PartieCentrale getPartieCentrale() {
		return partieCentrale;
	}

	public void setPartieCentrale(PartieCentrale partieCentrale) {
		this.partieCentrale = partieCentrale;
	}

	public PartieDroite getPartieDroite() {
		return partieDroite;
	}

	public void setPartieDroite(PartieDroite partieDroite) {
		this.partieDroite = partieDroite;
	}

	public PiedDePage getPiedDePage() {
		return piedDePage;
	}

	public void setPiedDePage(PiedDePage piedDePage) {
		this.piedDePage = piedDePage;
	}

	public ArrayList<Cohorte> getCohortes() {
		return cohortes;
	}

	public void setCohortes(ArrayList<Cohorte> cohortes) {
		this.cohortes = cohortes;
	}
}
